<?php
 
class htmldb{
 	
 	#表名
 	private $tablename=null;
 	
 	#执行条数
 	private $limit=null;
 	
 	#分页产品
 	private $pagesize=10;	
 	
 	#执行条件
 	private $where=null;
 	
 	#动态分页代码
 	public $pageshow=null;
 	
 	#静态分页代码
 	public $htmlpageshow=null;
 	
 	#主键字段名
 	private $idname=null;
 	
 	#根据查询条件进行排序
 	private $order=null;
 	
 	#获取查询条件的总条数
 	private $count=null;
 	
 	#连接条件
 	private $on=null;
 	
 	#分页标实
 	private $page='page';
 	
 	
 	#查询字段
 	private $field=' * ';
 	
 	#主要是做调试用
 	public $sql=null;
	
	##分页总数
	public $pagelens = 0;
 	
 	#列表总数
 	public $datalistcount=null;
 	
 	#数据组   '字段名'=>'值'
 	private $fieldvalue=array();
 	
 	#主键字段
 	private $id=null;
 	
 	/**
 	 * 初始化
 	 * @param $tablename
 	 */
 	public function __construct($dbobj=false){
		//连接数据库
		if(!$dbobj){
			$this->db = new mysql();
		}else{
			$this->db = $dbobj;
		}
		
		#初始化一些东西
		$this->field=' * ';
		$this->fieldvalue=array();
		$this->pagesize=10;
		$this->page='page';
		$this->datalistcount=$this->pageshow=$this->on=$this->count=$this->order=$this->idname=$this->where=$this->limit=null;
		
	}
	
	/**
	 * 执行一条sql语句
	 * @param $sql
	 */
	public function execquery($sql){
		return $this->db->query($sql);
	}
	
 	/**
	 * 获取数据列表
	 * @param $sql
	 */
	public function getlistarr($sql){
        $r_list=array();
		$result=$this->execquery($sql);
		while($row=@mysql_fetch_array($result)){
			array_push($r_list,$row);
		}
		return $this->getlistarr_stripslashes_array($r_list);
    }
    
	 /**
	 * 
	 */
	private function getlistarr_stripslashes_array($value){
		$value = is_array($value) ?
					array_map(array($this,'getlistarr_stripslashes_array'), $value) :
					stripslashes($value);
		return $value;
	}
	
	/**
	 * 表名
	 */
	public function table($tablename){
		#多表处理
		if(stripos($tablename,',')){
			$tables = explode(',',$tablename);
			foreach($tables as $val){
				if($this->tablename != '')
					$this->tablename .= ',';
					
				$this->tablename .= trim($val);
			}
		}else{#单表处理
			$this->tablename = $tablename;
		}
		#初始化一些东西
		$this->field=' * ';
		$this->fieldvalue=array();
		$this->pagesize=10;
		$this->page='page';
		$this->datalistcount=$this->pageshow=$this->on=$this->count=$this->order=$this->idname=$this->where=$this->limit=null;
		return $this;
		
	}
	
	
	/**
	 * 删除数据
	 */
	public function delete(){
		$limit=($this->limit==null)?' limit 1 ': $this->limit;
		$sql='delete from '
			. $this->tablename
			. $this->where
			. $limit;
		$this->sql=$sql;
		return $this->db->query($sql);
	}
	
	/**
	 * 修改数据
	 */
	public function update(){
		$d=$this->fieldvalue;
		$fstr='';
		$vstr='';
		foreach ($d as $k=>$v){
			$fstr.=($fstr=='')?$k.'="'.addslashes($v).'"':','.$k.'="'.addslashes($v).'"';
		}
		$limit=($this->limit==null)?' limit 1 ': $this->limit;
		$sql='update ' 
			. $this->tablename 
			. ' set ' 
			. $fstr
			. $this->where 
			. $limit ;
	   $this->sql=$sql;
		return $this->db->query($sql);
	}
	
	/**
	 * 执行一条sql语句
	 * @param $sql
	 */
	public function query($sql){
		return $this->db->query($sql);
	}
	
	/**
	 * 返回当前插入的id
	 */
	public function insert_id(){
		return $this->db->insert_id();
	}
	
	/**
	 * 添加数据
	 */
	public function insert(){
		$d=$this->fieldvalue;
		$fstr='';
		$vstr='';
		foreach ($d as $k=>$v){
			$fstr.=($fstr=='')?$k:','.$k;
			$vstr.=($vstr=='')?'"'.addslashes($v).'"':',"'.addslashes($v).'"';
		}
		$sql='insert into ' 
			. $this->tablename 
			. '(' . $fstr . ')'
			. 'values '
			. '(' . $vstr . ')';
		$this->sql=$sql;
		return $this->db->query($sql);
	}
	
	
 	/**
	 * 查询
	 */
	public function select(){
		$sql='select '
			. $this->field . ' ' #字段
			. $this->count . ' ' #查询条数  
			. ' from '
			. $this->tablename . ' ' #表名
			. $this->on .' ' #连表查询条件
			. $this->where .' ' #查询条件
			. $this->order .' ' #排序
			. $this->limit ;  #查询条数
		$this->sql=$sql;
		return $this->db->getlistarr($sql);
	}
	
	/**
	 * 分页代码
	 */
	private function getPageBar($pagecount,$pagesize,$pagename,$pagenum=5){
		if(!is_numeric($pagenum)||!is_numeric($pagesize)){
			return false;
		}
		#获取总页数
		#$pagecount=ceil($pcount/$pagesize);
		$pageindex=isset($_GET[$pagename]) && is_numeric($_GET[$pagename]) && intval($_GET[$pagename])>0
				?$_GET[$pagename]
				:1;
		if($pageindex>$pagecount){
			ob_end_clean();
			header("HTTP/1.1 404 Not Found1");
			exit();
		}
		
		$htmlpagepath=strtr($_GET['htmlpagepath'],array(' '=>'+','_'=>'/'));
		$htmlpagepath=strtr(gzuncompress(base64_decode($htmlpagepath)),array('{$cid}'=>$_GET['classid']));
		#显示分页数字
		$htmlpages='';
		$pages='';
		for($i=1;$i<=$pagecount;$i++){
			if($i>$pageindex-$pagenum&&$i<$pageindex+$pagenum){
				if($i!=$pageindex){
					if($i==1){
						$htmlpages.='<li><a href="'.strtr($htmlpagepath,array('{$page}'=>'1')).'">'.$i.'</a></li>';
					}else{
						$htmlpages.='<li><a href="'.strtr($htmlpagepath,array('{$page}'=>$i)).'">'.$i.'</a></li>';
					}
				}else{
					$htmlpages.='<li class="active"><a href="javascript:;">'.$i.'</a></li>';
				}
			}
		}
	
		if($pageindex==1 || $pagecount==1){
			$htmlplost='<li class="disabled"><a aria-label="Previous" data-toggle="tooltip" title="当前已是第一页" href="javascript:;">&laquo;</a></li>';
		}else{
			if($pageindex==2){
				$htmlplost='<li><a data-toggle="tooltip" title="上一页" href="'.strtr($htmlpagepath,array('{$page}'=>'1')).'">&laquo;</a></li>';
			}else{
				$htmlplost=' <li><a data-toggle="tooltip" title="上一页" href="'.strtr($htmlpagepath,array('{$page}'=>($pageindex-1))).'">&laquo;</a></li>';
			}
		}
		if($pagecount==$pageindex){
			$htmlpnext='<li class="disabled"><a aria-label="Next" data-toggle="tooltip" title="当前已是最后一页" href="javascript:;">&raquo;</a></li>';
		}else{
			//$htmlpnext=' <a href="'.strtr($htmlpagepath,array('{$page}'=>($pageindex+1))).'" title="下一页">></a>';
			$htmlpnext='<li><a  data-toggle="tooltip" title="下一页" href="'.strtr($htmlpagepath,array('{$page}'=>($pageindex+1))).'">&raquo;</a></li>';
		}
		
		
		$this->htmlpageshow = '<ul class="pagination mypage">'.$htmlplost.$htmlpages.$htmlpnext.'</ul>';
		
		//$this->htmlpageshow='<a href="#">当前第 '.$pageindex.'/'.$pagecount.' 页 </a>'.$htmlplost.$htmlpages.$htmlpnext;
	}
	
	/**
	 * 取得表主健
	 * @param $tablename
	 */
	public function getfieldid($tablename){
		$tmp=$this->db->getlistarr('describe '.$tablename);
		foreach($tmp as $val){
			if($val['Key']==strtoupper('PRI')){
				return $val['Field'];
				break;
			}
		}
		return false;
	}
	
	
	/**
	 * 分页列表查询
	 */
	public function selectlist(){
		
		//describe  获取表信息
		#先取得记录总条数
		$sqlcountsql='select '
			. $this->field . ' ' #字段
			. ' from '
			. $this->tablename . ' ' #表名
			. $this->on .' ' #连表查询条件
			. $this->where .' '; #查询条件
		
		#取得表中主键
		if($this->idname==null){
			$zj=$this->getfieldid($this->tablename);
		}else{
			$zj=$this->idname;
		}
		
		$sqlcountdata=$this->db->getoners('select count('.$zj.') from '.$this->tablename.' '.$this->on.' '.$this->where.' ');
		$sqlcount=$sqlcountdata[0];
		$this->datalistcount=$sqlcount;
		if($this->pagesize=='all'){
			$this->pagesize = $sqlcount;
		}
		if($sqlcount>0){
			$pagecount=0;
			$page=1;
			if($this->pagesize!=null){
			$pagecount=ceil($sqlcount/$this->pagesize);
			$this->pagelens = $pagecount;
			$page=isset($_GET[$this->page]) && is_numeric($_GET[$this->page]) && intval($_GET[$this->page])>0 && intval($_GET[$this->page])<=$pagecount
				?$_GET[$this->page]
				:1;
			}
			//$limit=' limit '.($page-1)*$this->pagesize.','.$this->pagesize.' ';
			$limit=($this->pagesize==null)?'':' limit '.($page-1)*$this->pagesize.','.$this->pagesize.' ';
			$sql='select '
				. $this->field . ' ' #字段
				. ' from '
				. $this->tablename . ' ' #表名
				. $this->on .' ' #连表查询条件
				. $this->where .' ' #查询条件
				. $this->order .' ' #排序
				. $limit ;  #查询条数
			if($this->page!=null){
				$this->getPageBar($pagecount,$this->pagesize,$this->page);
			}
			$this->sql=$sql;
			return $this->db->getlistarr($sql);
		}else{
			if($this->pagesize==null){
				$this->pagesize = 10;
			}
			//$pagecount=ceil($sqlcount/$this->pagesize);
			//$this->pagelens = $pagecount;
			$page=isset($_GET[$this->page]) && is_numeric($_GET[$this->page]) && intval($_GET[$this->page])>0
				?$_GET[$this->page]
				:1;
				/*
			if(intval($page)>1){
				ob_end_clean();
				header("HTTP/1.1 404 Not Found");
				exit();
			}
			*/
			//$limit=' limit '.($page-1)*$this->pagesize.','.$this->pagesize.' ';
			$limit=($this->pagesize==null)?'':' limit '.($page-1)*$this->pagesize.','.$this->pagesize.' ';
		
			$sql='select '
				. $this->field . ' ' #字段
				. ' from '
				. $this->tablename . ' ' #表名
				. $this->on .' ' #连表查询条件
				. $this->where .' ' #查询条件
				. $this->order .' ' #排序
				. $limit ;  #查询条数
			$this->sql=$sql;
			return null;
		}
	}
	
	/**
	 * 单行查询
	 */
	public function onerows(){
		$limit=($this->limit==null)?' limit 1 ': $this->limit;
		
		$where=($this->id==null)
			?$this->where
			:'where '.$this->id;
		$sql='select '
			. $this->field . ' ' #字段
			. $this->count . ' ' #查询条数  
			. ' from '
			. $this->tablename . ' ' #表名
			. $where .' ' #查询条件
			. $this->order .' ' #排序
			. $limit ;  #查询条数
		$this->sql=$sql;
		return $this->db->getoners($sql);
	}
	
	/**
	 * 执行条数
	 * @param $limit
	 */
	public function limit($limit){
		if(!empty($limit)){
			$this->pagesize=$limit;
			$this->limit=' limit '.$limit;
		}else{
			$this->pagesize=null;
			$this->limit=null;
		}
		return $this;
	}
	
	/**
	 * 执行条件
	 * @param $where
	 */
	public function where($where){
		if(!empty($where)){
			$this->where=' where '.$where;
		}else{
			$this->where=null;
		}
		return $this;
	}
	
	/**
	 * 排序
	 * @param $order
	 */
	public function order($order){
		if(!empty($order)){
			$this->order=' order by '.$order;
		}else{
			$this->order=null;
		}
		return $this;
	}
	
	/**
	 * 获取查询条件的总条数
	 * @param $count
	 */
	public function count($count){
		if(!empty($count)){
			$this->$count=' count('.$count.')';
		}else{
			$this->$count=null;
		}
		return $this;
	}
	
	/**
	 * 获取当前分页的页码
	 * @param $page
	 */
	public function page($page){
		if(!empty($page)){
			$this->page=$page;
		}else{
			$this->page=null;
		}
		return $this;
	}
	
	/**
	 * 查询
	 * @param $field
	 */
	public function field($field){
		if(!empty($field)){
			$this->field=$field;
		}else{
			$this->field=' * ';
		}
		return $this;
	}
	
	/**
	 * 数据组用与数据的添加与修改
	 * @param $fieldvalue
	 */
	public function fieldvalue($fieldvalue){
		if(!empty($fieldvalue)){
			$this->fieldvalue=$fieldvalue;
		}else{
			$this->fieldvalue=null;
		}
		return $this;
	}
	
	/**
	 * 连接查询条件
	 * @param $on
	 */
	public function on($on){
		if(!empty($on)){
			$this->on=' on '.$on;
		}else{
			$this->on=null;
		}
		return $this;
	}
	
	/**
	 * 主健名称(用于分页查询)
	 * @param $idname
	 */
	public function idname($idname){
		if(!empty($idname)){
			$this->idname=$idname;
		}else{
			$this->idname=null;
		}
		return $this;
	}
	
	
	/**
	 * 根据主健来查
	 */
	public function id($id){
		if(!empty($id)){
			$this->id=($this->idname==null)
				?$this->getfieldid($this->tablename).'='.$id
				:$this->idname.'='.$id;
		}else{
			$this->id=null;
		}
		return $this;
	}
	
	
	
   /**
	 * 创建添加sql语句
	 * @param $tablename 表名
	 * @param $addfield 手工添加内容     menuid|1,member|10
	 * @param $notfield 手工取消添加内容    yzm|asd
	 * @return string
	 */
	
	public function Create_Insertsql($tablename,$addfield=false,$notfield=false){
		$field_arr=array_keys($_POST);  //获取字段名
		$insarr=array();
		for($i=0;$i<count($field_arr);$i++){
			$isfield=true;
			if($notfield!==false){
				$notfieldarr=explode('|',$notfield);
				$notfieldarr_c=count($notfieldarr);
				for($k=0;$k<$notfieldarr_c;$k++){
					if($notfieldarr[$k]==$field_arr[$i]){
						$isfield=false;
						break;
					}
				}
			}
			if($isfield){
				$temp['field']=$field_arr[$i];
				$temp['value']=$_POST[$field_arr[$i]];
				if(is_array($temp['value'])){
					$temparr=$temp['value'];
					$tempvalue='';
					$valuearr_count=count($temparr);
					for($j=0;$j<$valuearr_count;$j++){
						$tempvalue.=$temparr[$j];
						if($j<$valuearr_count-1){
							$tempvalue.=",";
						}
					}
					$temp['value']=$tempvalue;
				}
				array_push($insarr,$temp);
			}
		}
		if($addfield!==false){
			$addfieldarr=explode(',',$addfield);
			$addfieldarr_c=count($addfieldarr);
			for($i=0;$i<$addfieldarr_c;$i++){
				$addfieldarrsplit=explode('|',$addfieldarr[$i]);
				$temp['field']=$addfieldarrsplit[0];
				$temp['value']=$addfieldarrsplit[1];
				array_push($insarr,$temp);
			}
			
		}
		$field='';
		$value='';
		for($i=0;$i<count($insarr);$i++){
			$field.="`{$insarr[$i]['field']}`";
			$value.="'".addslashes($insarr[$i]['value'])."'";
			if($i<(count($insarr)-1)){
				$field.=',';
				$value.=',';
			}
		}
		$insert_sql="INSERT INTO `{$tablename}`({$field})VALUES({$value})";
		return $insert_sql;

	}


	/**
	 * 创建修改sql
	 * @param $tablename tablename
	 * @param $where Conditions
	 * @param $addfield add fields menuid|1,member|10
	 * @param $notfield del fields yzm|asd
	 * @return string
	 */
	public function Create_Updatesql($tablename,$where='',$addfield=false,$notfield=false){
		$field_arr=array_keys($_POST);  //获取字段名
		$updatearr=array();
		for($i=0;$i<count($field_arr);$i++){
			$isfield=true;
			if($notfield!==false){
				$notfieldarr=explode('|',$notfield);
				$notfieldarr_c=count($notfieldarr);
				for($k=0;$k<$notfieldarr_c;$k++){
					if($notfieldarr[$k]==$field_arr[$i]){
						$isfield=false;
						break;
					}
				}
			}
			if($isfield){
				$temp['field']=$field_arr[$i];
				$temp['value']=$_POST[$field_arr[$i]];
				if(is_array($temp['value'])){
					$temparr=$temp['value'];
					$tempvalue='';
					$valuearr_count=count($temparr);
					for($j=0;$j<$valuearr_count;$j++){
						$tempvalue.=$temparr[$j];
						if($j<$valuearr_count-1){
							$tempvalue.=",";
						}
					}
					$temp['value']=$tempvalue;
				}
				array_push($updatearr,$temp);
			}
		}
		if($addfield!==false){
			$addfieldarr=explode(',',$addfield);
			$addfieldarr_c=count($addfieldarr);
			for($i=0;$i<$addfieldarr_c;$i++){
				$addfieldarrsplit=explode('|',$addfieldarr[$i]);
				$temp['field']=$addfieldarrsplit[0];
				$temp['value']=$addfieldarrsplit[1];
				array_push($updatearr,$temp);
			}
		}
		$update_sql="UPDATE {$tablename} SET ";
		$updatearr_c=count($updatearr);
		for($i=0;$i<$updatearr_c;$i++){
			$update_sql.="`{$updatearr[$i]['field']}`='".addslashes($updatearr[$i]['value'])."'";
			if($i<($updatearr_c-1)){
				$update_sql.=',';
			}
		}
		$update_sql.=" WHERE {$where} ";
		return $update_sql;
	}
	
	
	
 	
 }
 
 